// console.log(`frappe 👉`,frappe)

// console.log(`frappe ing👇`)
// console.log(`加载desk级别 js ing👇`)
// console.log(`Purchase Order ing👇`)
// frappe.ui.form.on("Purchase Order", {
//     refresh(frm) {
//         console.log(`加载desk级别 Purchase Order refresh ing👇`)
//         console.log(`frm.doc 👉`, frm.doc)
//         // console.log(`Material Request frm 👉`, frm)
//         console.log(`frappe.流程追踪id 👉`, frappe.流程追踪id)
//     },
// });

// frappe.ui.form.on("Material Request", {
//     refresh(frm) {
//         console.log(`Material Request frm.doc 👉`, frm.doc)
//     },
// });

// console.log(`Material Request js ing👇`)
// frappe.ui.form.on("Material Request", {
//     refresh(frm) {
//         console.log(`Material Request refresh ing👇`)
//         console.log(`frm.doc 👉`, frm.doc)
//         // console.log(`Material Request frm 👉`, frm)
//         console.log(`frappe.流程追踪id 👉`, frappe.流程追踪id)
//         // frappe.call({
//         //     method: "lczz.utils.a.更新lczz",
//         //     args: {
//         //         id: frappe.流程追踪id,
//         //         物料需求单: frm.doc.name
//         //     }
//         // });
//     },

//     async on_submit(frm) {
//         console.log(`物料需求单 on_submit ing👇`)
//         frappe.call({
//             method: "lczz.utils.a.更新lczz",
//             args: {
//                 id: frappe.流程追踪id,
//                 物料需求单: frm.doc.name
//             }
//         });
//     },
// });







// import frappe
// from frappe import _

// 保存原始的savesubmit方法引用
// const validate_and_save = frappe.ui.form.Form.prototype.validate_and_save;
// console.log(`frappe 👉`,frappe)
// console.log(`frappe.ui.form 👉`,frappe.ui.form)
// console.log(`frappe.ui.form.Form 👉`,frappe.ui.form.Form)
// 定义一个新的函数来劫持原方法的调用
// function a_validate_and_save(save_action, callback, btn, on_error, resolve, reject) {
//     const me = this;
//     // 先执行自定义的前置逻辑，例如进行额外的准备工作
//     console.log("自定义的savesubmit前置逻辑执行中...");
//     // 调用原始的savesubmit方法，获取其返回的Promise
//     render_form.call(this, save_action, callback, btn, on_error, resolve, reject);
//     console.log("自定义的savesubmit后置逻辑执行中...");

// }

// // 替换原方法的引用为劫持后的函数（这里使用了一个技巧，避免直接修改源代码）
// Object.defineProperty(frappe.ui.form.Form.prototype, "validate_and_save", {
//     value: a_validate_and_save,
//     writable: true,
//     enumerable: false,
//     configurable: true
// });

// // 保存原始的savesubmit方法引用
// const originalSavesubmit = frappe.ui.form.Form.prototype.savesubmit;

// // 定义一个新的函数来劫持原方法的调用
// function hijackedSavesubmit(btn, callback, on_error) {
//     const me = this;
//     // 先执行自定义的前置逻辑，例如进行额外的准备工作
//     console.log("自定义的savesubmit前置逻辑执行中...");
//     // 调用原始的savesubmit方法，获取其返回的Promise
//     const originalPromise = originalSavesubmit.call(this, btn, callback, on_error);

//     return originalPromise.then(() => {
//         // 执行自定义的后置逻辑，比如进行额外的数据处理或者显示提示信息等
//         console.log("自定义的savesubmit后置逻辑执行中...");
//         // 假设这里根据业务需求显示一个自定义的提示信息（只是示例，需根据实际情况调整）
//         frappe.show_alert({
//             message: "保存提交完成，执行了自定义逻辑！",
//             indicator: "green"
//         });
//         return Promise.resolve();
//     });
// }

// // 替换原方法的引用为劫持后的函数（这里使用了一个技巧，避免直接修改源代码）
// Object.defineProperty(frappe.ui.form.Form.prototype, "savesubmit", {
//     value: hijackedSavesubmit,
//     writable: true,
//     enumerable: false,
//     configurable: true
// });

// // 后续正常调用表单的savesubmit方法，就会执行劫持后的逻辑（先执行原有再执行自定义）
// // 例如，假设在某个按钮点击事件中有如下调用（这里只是示例，实际调用场景根据业务而定）
// const btn = document.getElementById('保存提交按钮');
// btn.addEventListener('click', function () {
//     const frm = new frappe.ui.form.Form({...});
//     frm.savesubmit(btn, function () {
//         console.log("保存提交完成");
//     }, function (error) {
//         console.error("保存提交出现错误:", error);
//     });
// });





// (function() {
//     const originalOpen = XMLHttpRequest.prototype.open;
//     const originalSend = XMLHttpRequest.prototype.send;

//     XMLHttpRequest.prototype.open = function(method, url) {
//         this._url = url;  // 保存请求的 URL
//         originalOpen.apply(this, arguments);
//     };

//     XMLHttpRequest.prototype.send = function(body) {
//         // 在这里添加自定义的信息到请求 headers 或请求体
//         if (this._url) {
//             this.setRequestHeader("amtf", "YourCustomValue"); // 添加自定义头
//             // 如果需要修改请求体，也可以在此进行
//         }
//         originalSend.apply(this, arguments);  // 发送请求
//     };
// })();



// // 保存原始的 frappe.call 函数
// const originalFrappeCall = frappe.call;

// // 创建扩展的 frappe.call 函数
// frappe.call = function (opts) {
//     // 新增自定义参数，例如：在 opts.args 中添加一个自定义参数
//     if (!opts.args) {
//         opts.args = {}; // 确保 opts.args 是一个对象
//     }

//     // 在这里添加你的自定义参数
//     opts.args.customParam = "your_custom_value"; // 可根据需要动态设置值

//     // 你可以在这里添加其他自定义逻辑，例如日志
//     console.log("Custom frappe.call invoked with args:", opts.args);

//     // 调用原始的 frappe.call
//     return originalFrappeCall.apply(this, arguments);
// };

